iT邦幫忙

2023 iThome 鐵人賽

DAY 0
0
自我挑戰組

從零到全端:轉職者的 To-Do List 技能之旅系列 第 6

從零到全端:轉職者的 To-Do List 技能之旅-後端開發-環境建立

  • 分享至 

  • xImage
  •  

開發

走到現在已經完成了有:

  1. 使用者故事
  2. 網站畫面
  3. API 規格
  4. 資料庫設計

有了這些總算能夠進入開發環節啦!
接下來的部分就是在開發過程中為了完成功能,我碰到的各種狀況,做了那些嘗試,最後又是怎麼解決。
那因為細節比較多可能會出現各種錯誤,所以就請各位大大多多指正拉!/images/emoticon/emoticon41.gif

規劃

因為開發階段的事情比較多,所以會每天完成一個小階段性目標。
今天的幾個目標

  1. 將環境建立起來
  2. 安裝使用到套件
  3. 主要的套件引用並集中管理
  4. 將 app 的設定集中管理
  5. 在 app 中引用套件並初始化

Flask 開發環境建立

  • 建立虛擬環境並開啟

    • python -m venv env

    • .\env\Script\activate

  • 安裝套件

    • flask

      pip install flask
      
    • 連接 MySQL

      pip install mysqlclient
      
    • flask-SQLAlchemy

      pip install Flask-SQLAlchemy
      
    • RESTful API

      pip install flask-restx
      
    • JWT

      pip install Flask-JWT-Extended
      
    • CORS

      pip install Flask-Cors
      
  • 簡單測試

    • 建立簡單 server route 並使用 python app.py 開啟本地伺服器

      • https://ithelp.ithome.com.tw/upload/images/20230922/20162291jhb1eBGBQo.png

      • https://ithelp.ithome.com.tw/upload/images/20230922/20162291RRkoafRRS7.png

    • 連線路由確認回傳狀況

      https://ithelp.ithome.com.tw/upload/images/20230922/20162291gkZ25eKp7N.png

建立主要套件的管理檔案

app > extensions.py

from flask_sqlalchemy import SQLAlchemy
from flask_restx import Api
from flask_jwt_extended import JWTManager
from flask_cors import CORS

# 創建實例
api = Api() 
db = SQLAlchemy() 
jwt = JWTManager() 
cors = CORS() 

建立設定檔

app > config.py

import os
import datetime

class Config():
  TEMPLATES_AUTO_RELOAD = True
  ERROR_404_HELP = False

  SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URI')  # 部署環境使用
  # SQLALCHEMY_DATABASE_URI = "mysql://使用者:密碼@localhost/todo"  # 開發環境使用
  SQLALCHEMY_TRACK_MODIFICATIONS = False

  JWT_SECRET_KEY = os.environ.get('JWT_SECRET_KEY') # 部署環境使用
  # JWT_SECRET_KEY = "this secret key" # 開發環境使用
  JWT_ACCESS_TOKEN_EXPIRES = datetime.timedelta(minutes=60)
  JWT_TOKEN_LOCATION = ["headers", "cookies"]  
  JWT_CSRF_IN_COOKIES = False


  JWT_COOKIE_SECURE = True  # Secure 屬性
  JWT_COOKIE_SAMESITE = 'None'  # SameSite 屬性

在 app 中引用套件以及設定檔

app > init.py

from flask import Flask
from .extensions import api, db, jwt, cors
from .config import Config

def create_app(): # 使用 def create_app() 主要是後面部署時使用到 Gunicorn 需要的設定
    app = Flask(__name__)
    app.config.from_object(Config)
    api.init_app(app)
    db.init_app(app)
    jwt.init_app(app)
    cors.init_app(app)
    
    return app

上一篇
從零到全端:轉職者的 To-Do List 技能之旅-資料庫設計
下一篇
從零到全端:轉職者的 To-Do List 技能之旅-後端開發- Flask-SQLAlchemy
系列文
從零到全端:轉職者的 To-Do List 技能之旅15
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言